// 输入: array = [1, 2, 5, 2, -1, 3, 1, 2], sum = 4
// 输出: [[1,3], [1,3], [5,-1], [2,2], [2,2], [2,2]]

function findPairsWithSum(array, sum) {
  // 初始化一个空数组用于存储结果
  var result = [];

  // 初始化一个对象用于记录每个数字出现的次数
  var counts = {};

  // 遍历数组中的每个元素
  for (var i = 0; i < array.length; i++) {
    var num = array[i]; // 当前元素
    var complement = sum - num; // 当前元素的补数

    // 检查补数是否存在于 counts 对象中
    if (counts[complement] !== undefined) {
      // 如果存在，按补数的出现次数将 [num, complement] 加入结果数组
      for (var j = 0; j < counts[complement]; j++) {
        result.push([num, complement]);
      }
    }

    // 更新 counts 对象中当前元素的出现次数
    if (counts[num] === undefined) {
      counts[num] = 0;
    }
    counts[num]++;
  }

  // 返回结果数组
  return result;
}

// 测试函数
var array = [1, 2, 5, 2, -1, 3, 1, 2];
var sum = 4;
console.log(findPairsWithSum(array, sum));
